package client;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;


import common.Client;


/** Classe che gestisce la grafica del frame di login/registrazione.
 *
 */
public class Logreg{

	private C_GSessioneGioco cg;
	private Client cl;
	private JPanel panelbottoni, panelusername, panelpassword, paneleast;
	private BackgroundPanel panelimage;
	private JTextField textusername;
	private JPasswordField textpassword;
	private int windowwidth, windowheight;
	/** Attributo che identifica il frame della finestra login/registrazione.
	 * 
	 */
	protected JFrame framelogreg;

	
	
	/** Costruttore dell'oggetto C_GSessioneGioco.<br />
	 * Si occupa della gestione della finestra di login/registrazione del Client.
	 * @param cg Permette a Logreg di chiamare la classe C_GSessioneGioco.
	 * @param afro Permette a Logreg di chiamare la l'interfaccia Client.
	 */
	protected Logreg(C_GSessioneGioco cg, Client afro){
		this.cg=cg;
		this.cl=afro;
		
		Toolkit t = Toolkit.getDefaultToolkit();
		Dimension screenSize = t.getScreenSize();
		windowwidth = (int)screenSize.getWidth();
		windowheight= (int)screenSize.getHeight();	

		framelogreg = new JFrame("Dino Island");
		framelogreg.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		framelogreg.setSize(600, 300);
		framelogreg.setResizable(false);
		framelogreg.setLocation(windowwidth/2-300, windowheight/2-150);
		Image im=Toolkit.getDefaultToolkit().getImage((getClass().getResource("/images/ICON.png")));
		framelogreg.setIconImage(im);
		panelimage = new BackgroundPanel(getClass().getResource("/images/SFONDO.png"));
		panelimage.setLayout(new BorderLayout());
		framelogreg.add(panelimage);
		JButton login = new JButton("LOGIN");
		login.addActionListener(new login());
		//login.setOpaque(false);
		login.setContentAreaFilled(false);
		//login.setBorderPainted(false);
		JButton registrazione = new JButton("REGISTRAZIONE");
		registrazione.addActionListener(new registrazione());
		registrazione.setContentAreaFilled(false);
		panelbottoni = new JPanel(new GridLayout(2,1));
		panelbottoni.setPreferredSize(new Dimension(170, 50));
		panelbottoni.add(login);
		panelbottoni.add(registrazione);
		panelbottoni.setOpaque(false);
		panelimage.add(panelbottoni, BorderLayout.WEST);
		JButton escidalgioco = new JButton("Esci dal Gioco");
		escidalgioco.addActionListener(new esciDalGioco());
		escidalgioco.setContentAreaFilled(false);
		panelimage.add(escidalgioco, BorderLayout.SOUTH);
		panelusername = new JPanel();
		panelusername.setBorder(BorderFactory.createTitledBorder("Username"));
		textusername = new JTextField("",12);
		panelusername.add(textusername);
		panelusername.setOpaque(false);
		panelpassword = new JPanel();
		panelpassword.setBorder(BorderFactory.createTitledBorder("Password"));
		textpassword = new JPasswordField("",12);
		panelpassword.add(textpassword);
		panelpassword.setOpaque(false);
		paneleast = new JPanel(new GridLayout(2,1));
		paneleast.setPreferredSize(new Dimension(150, 50));
		paneleast.add(panelusername);
		paneleast.add(panelpassword);
		paneleast.setOpaque(false);
		panelimage.add(paneleast, BorderLayout.EAST);
		//ImageIcon miologo = new ImageIcon(getClass().getResource("/images/dino.jpg"));
		//JLabel logo = new JLabel(miologo);
		//panelimage.add(logo, BorderLayout.CENTER);
		framelogreg.setVisible(true);
	}
	
	
	/** Classe chiamata alla pressione del pulsante per creautente.<br />
	 * Invia all'interfaccia Client la richiesta di creazione dell'utente (con password).<br />
	 *
	 */
	private class registrazione implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			String username = textusername.getText();
			char[] password = textpassword.getPassword();
			String passwordstring = String.valueOf(password);
			cg.setUtenteUeP(username,passwordstring);
			cl.creaUtente(username, passwordstring);
		}
	}
	
	
	/** Classe chiamata alla pressione del pulsante per escidalgioco.<br />
	 * Chiude la finestra di login/registrazione.
	 *
	 */
	private class esciDalGioco implements ActionListener{
		public void actionPerformed(ActionEvent e) {
		System.exit(0);
		}
	}
	
	
	/** Classe chiamata alla pressione del pulsante per login.<br />
	 * Invia all'interfaccia Client la richiesta di login dell'utente (con password)<br />
	 * Chiama il metodo setUtenteUeP di C_GSessioneGioco.
	 *
	 */
	private class login implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			String username = textusername.getText();
			char[] password = textpassword.getPassword();
			String passwordstring = String.valueOf(password);
			cg.setUtenteUeP(username,passwordstring);
			cl.login(username, passwordstring);
		}
	}
	
	
	/** Estensione di JPanel. Classe creata per disegnare lo sfondo delle caselle della mappa.
	 *
	 */
	@SuppressWarnings("serial")
	private class BackgroundPanel extends JPanel {
	    public BackgroundPanel(URL url) {
	        super(true);
	        setOpaque(false);
	        icon = new ImageIcon(url);
	        background = icon.getImage();
	    }
	    public void paintComponent(Graphics g) {
	    	g.drawImage(background, 0, 0, 600, 300, this);
	    }   
	    protected ImageIcon icon;
	    protected Image background;
	}
	
}
